package ar.fi.uba.celdas.correccion.planificacion.heuristicas;

import java.util.Collection;

import ar.fi.uba.celdas.correccion.planificacion.HeuristicaPlanificacion;
import ar.fi.uba.celdas.correccion.planificacion.HeuristicaPlanificacionType;
import ar.fi.uba.celdas.interfaces.bc.IBaseConocimientos;
import ar.fi.uba.celdas.interfaces.bc.Regla;
import ar.fi.uba.celdas.interfaces.bc.Sensor;

public class Exclusion extends HeuristicaPlanificacion {

	public Exclusion() {
		super(HeuristicaPlanificacionType.EXCLUSION);
	}

	@Override
	public void corregirRegla(Regla original, IBaseConocimientos bc) {
		if (bc == null || original == null) {
			return;
		}

		// Una situacion anterior.
		Collection<Sensor> situacionInicial = bc.getEstadoAnterior();

		// Condiciones de la teoria a rectificar.
		Collection<Sensor> condiciones = original.getCondiciones();

		// Verifico si la las condiciones coinciden y la teoria fallo.
		if (!verificarCondiciones(situacionInicial, condiciones)) {

			// Excluyo de las condiciones supuestas de la teoria, los elementos
			// de la descripcion de la situacion a la cual la teoria fue
			// aplicada y produjo fallo
			for (Sensor situacion : situacionInicial) {
				if (!condiciones.contains(situacion)) {
					// agrego la situación a las condiciones negadas
					original.getCondicionesNegadas().add(situacion);
				}
			}
		}
	}
}
